In [1]:
from rich import print
import pandas as pd
import pandas_datareader.data as web
import yfinance as yf
import warnings
import matplotlib.pyplot as plt
import numpy as np
import plotly.graph_objects as go
from datetime import datetime
import mplfinance as mpf

warnings.filterwarnings("ignore")

Carregando a base de dados

In [2]:
def extract_data_qt(quote, period="max"):
    """ Metodo para carregamento das bases 
        de dados na apy yfinance do Yahoo.
        
        Args: 
            quote: Nome do código da ação a ser consultada
                    ex.: 'RAIL3.SA', 'GGBR4.SA'
            period: Periodo a ser consultado
                    ex.: "max", "5y", "1m", "30d"
        Returns: 
            database: Base de dados com histórico das ações
            de acordo com o periodo"""
    yf.pdr_override()
    df = web.get_data_yahoo(quote, period=period, rounding=True)
    return df
In [3]:
marfrig = extract_data_qt('MRFG3.SA')
gerdau = extract_data_qt('GGBR4.SA')
rumo = extract_data_qt('RAIL3.SA')
[*********************100%***********************]  1 of 1 completed
[*********************100%***********************]  1 of 1 completed
[*********************100%***********************]  1 of 1 completed

Marfrig

In [4]:
#Verificando os dados carregados
marfrig.head()
Out[4]:
Open High Low Close Adj Close Volume
Date
2007-06-29 17.05 18.40 17.05 18.00 17.94 4393400
2007-07-02 18.29 19.98 17.81 19.30 19.24 1598000
2007-07-03 19.55 19.56 18.34 18.85 18.79 680600
2007-07-04 18.51 18.99 18.42 18.42 18.36 251100
2007-07-05 18.50 19.30 18.50 19.20 19.14 1104300
In [5]:
#Avaliando os dados
marfrig.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 3244 entries, 2007-06-29 to 2020-08-24
Data columns (total 6 columns):
 #   Column     Non-Null Count  Dtype  
---  ------     --------------  -----  
 0   Open       3244 non-null   float64
 1   High       3244 non-null   float64
 2   Low        3244 non-null   float64
 3   Close      3244 non-null   float64
 4   Adj Close  3244 non-null   float64
 5   Volume     3244 non-null   int64  
dtypes: float64(5), int64(1)
memory usage: 177.4 KB
In [6]:
#numero de amostras  (linhas e colunas)
def amostras(df):
    """Mostra os valores de amostras e colunas do arquivo
      Argumentos:
          df: Lista/base de dados.
      Retorna:
          Um print informando os valores de amostras e colunas do arquivo."""
    print("O arquivo possui [green]{0}[/green] amostras e [green]{1}[/green] colunas".format(
        df.shape[0], df.shape[1] ))
In [7]:
amostras(marfrig)
O arquivo possui 3244 amostras e 6 colunas
In [8]:
#Colunas com valores faltantes
print("Colunas com valores Faltantes: \n {0} \n".format(
    marfrig.columns[marfrig.isnull().any()].values))
Colunas com valores Faltantes: 
  

In [9]:
marfrig['Date'] = marfrig.index
In [10]:
#linhas duplicadas
print(" Duplicadas: [green]{0} ".format(
        marfrig.duplicated().sum()))
 Duplicadas: 0 
In [11]:
#Verificando a quantidade de valores unicos em cada coluna
marfrig.nunique()
Out[11]:
Open         1200
High         1229
Low          1214
Close        1162
Adj Close    1192
Volume       3115
Date         3244
dtype: int64

Plotando o gráfico com o preços de fechamento da Marfrig

In [12]:
marfrig["Close"].plot(figsize=(22,8))
Out[12]:
<matplotlib.axes._subplots.AxesSubplot at 0x7ffab8d738d0>

As ações da Marfrig se manteve em queda no periodo entre 2008 e 2010 e entre 2012 até 2019 se manteve também em baixa.

Verificando a Média Movel de 21 dias e 200 dias da Marfrig

In [13]:
marfrig["Close"].plot(figsize=(22,8), label="Marfrig")
marfrig["Close"].rolling(21).mean().plot(label="MM21")
marfrig["Close"].rolling(200).mean().plot(label="MM200")
plt.legend()
Out[13]:
<matplotlib.legend.Legend at 0x7ffab8979710>
In [14]:
df = marfrig[marfrig.index.year == 2020]

fig = go.Figure(data=[go.Candlestick(x=df.index,
                open=df['Open'],
                high=df['High'],
                low=df['Low'],
                close=df['Close'])])

fig.update_layout(title= "Marfrig 2020")

Comparativo entre o preço e o volume das ações da Marfrig

In [15]:
df = marfrig[marfrig.index.year == 2020]

mpf.plot(df,volume=True,tight_layout=True, style='yahoo')

Verificando a variação do menor valor para o maior valor nos preços das ações da Marfrig

In [16]:
mpf.plot(df,fill_between=dict(y1=df['Low'].values,y2=df['High'].values))

As ações da Marfrig cairam bastante em Março/2020 (Possível causa Pandemia do Coronavirus) atualmente está seguindo uma tendência de alta!

Gerdau

In [17]:
#Verificando os dados carregados
gerdau.head()
Out[17]:
Open High Low Close Adj Close Volume
Date
2000-05-02 2.47 2.56 2.42 2.56 1.26 348659987.0
2000-05-03 2.56 2.56 2.47 2.47 1.22 248039991.0
2000-05-04 2.49 2.51 2.49 2.49 1.23 478529982.0
2000-05-05 2.49 2.56 2.49 2.53 1.25 537029980.0
2000-05-08 2.53 2.53 2.49 2.49 1.23 198899993.0
In [18]:
#Avaliando os dados
gerdau.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 5025 entries, 2000-05-02 to 2020-08-24
Data columns (total 6 columns):
 #   Column     Non-Null Count  Dtype  
---  ------     --------------  -----  
 0   Open       5024 non-null   float64
 1   High       5024 non-null   float64
 2   Low        5024 non-null   float64
 3   Close      5024 non-null   float64
 4   Adj Close  5024 non-null   float64
 5   Volume     5024 non-null   float64
dtypes: float64(6)
memory usage: 274.8 KB
In [19]:
amostras(gerdau)
O arquivo possui 5025 amostras e 6 colunas
In [20]:
gerdau['Date'] = gerdau.index
In [21]:
#Colunas com valores faltantes
print("Colunas com valores Faltantes: \n {0} \n".format(
    gerdau.columns[gerdau.isnull().any()].values))
Colunas com valores Faltantes: 
  

In [22]:
#linhas duplicadas
print(" Duplicadas: [green]{0} ".format(
        gerdau.duplicated().sum()))
 Duplicadas: 0 
In [23]:
#Verificando a quantidade de valores unicos em cada coluna
gerdau.nunique()
Out[23]:
Open         1869
High         1984
Low          1951
Close        1955
Adj Close    1874
Volume       4416
Date         5025
dtype: int64

Plotando o gráfico com o preços de fechamento da Gerdau

In [24]:
gerdau["Close"].plot(figsize=(22,8))
Out[24]:
<matplotlib.axes._subplots.AxesSubplot at 0x7ffab0ee6450>

As ações da Gerdau teve sua principal alta entre 2008-2009 e no ano de 2016 estava em queda.

Verificando a Média Movel de 21 dias e 200 dias da Gerdau

In [25]:
gerdau["Close"].plot(figsize=(22,8), label="Gerdau")
gerdau["Close"].rolling(21).mean().plot(label="MM21")
gerdau["Close"].rolling(200).mean().plot(label="MM200")
plt.legend()
Out[25]:
<matplotlib.legend.Legend at 0x7ffab8c96f50>
In [26]:
df = gerdau[gerdau.index.year == 2020]

fig = go.Figure(data=[go.Candlestick(x=df.index,
                open=df['Open'],
                high=df['High'],
                low=df['Low'],
                close=df['Close'])])

fig.update_layout(title= "Gerdau 2020")

Comparativo entre o preço e o volume das ações da Gerdau

In [27]:
df = gerdau[gerdau.index.year == 2020]

mpf.plot(df,volume=True,tight_layout=True, style='yahoo')

Verificando a variação do menor valor para o maior valor nos preços das ações da Gerdau

In [28]:
mpf.plot(df,fill_between=dict(y1=df['Low'].values,y2=df['High'].values))

As ações da Gerdau cairam bastante em Março/2020 (Possível causa Pandemia do Coronavirus) atualmente está seguindo uma tendência de alta!

Rumo

In [29]:
#Verificando os dados carregados
rumo.head()
Out[29]:
Open High Low Close Adj Close Volume
Date
2015-04-02 10.19 12.70 10.19 12.70 12.70 3613105
2015-04-06 13.00 13.66 12.63 12.85 12.85 2057909
2015-04-07 12.41 12.48 11.52 11.67 11.67 3188011
2015-04-08 11.89 11.96 11.45 11.52 11.52 2473117
2015-04-09 11.37 12.48 11.30 12.04 12.04 3020273
In [30]:
#Avaliando os dados
rumo.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1340 entries, 2015-04-02 to 2020-08-24
Data columns (total 6 columns):
 #   Column     Non-Null Count  Dtype  
---  ------     --------------  -----  
 0   Open       1340 non-null   float64
 1   High       1340 non-null   float64
 2   Low        1340 non-null   float64
 3   Close      1340 non-null   float64
 4   Adj Close  1340 non-null   float64
 5   Volume     1340 non-null   int64  
dtypes: float64(5), int64(1)
memory usage: 73.3 KB
In [31]:
amostras(rumo)
O arquivo possui 1340 amostras e 6 colunas
In [32]:
rumo['Date'] = rumo.index
In [33]:
#Colunas com valores faltantes
print("Colunas com valores Faltantes: \n {0} \n".format(
    rumo.columns[rumo.isnull().any()].values))
Colunas com valores Faltantes: 
  

In [34]:
#linhas duplicadas
print(" Duplicadas: [green]{0} ".format(
        rumo.duplicated().sum()))
 Duplicadas: 0 
In [35]:
#Verificando a quantidade de valores unicos em cada coluna
rumo.nunique()
Out[35]:
Open          902
High          926
Low           911
Close         903
Adj Close     903
Volume       1321
Date         1340
dtype: int64

Plotando o gráfico com o preços de fechamento da Rumo

In [36]:
rumo["Close"].plot(figsize=(22,8))
Out[36]:
<matplotlib.axes._subplots.AxesSubplot at 0x7ffab0ebab50>

As ações da Rumo vem crescendo desde de 2016, se mantendo em um ritmo constante e tendo uma queda brusca em 2020.

Verificando a Média Movel de 21 dias e 200 dias da Rumo

In [37]:
rumo["Close"].plot(figsize=(22,8), label="Rumo")
rumo["Close"].rolling(21).mean().plot(label="MM21")
rumo["Close"].rolling(200).mean().plot(label="MM200")
plt.legend()
Out[37]:
<matplotlib.legend.Legend at 0x7ffab07d9790>
In [38]:
df = rumo[rumo.index.year == 2020]

fig = go.Figure(data=[go.Candlestick(x=df.index,
                open=df['Open'],
                high=df['High'],
                low=df['Low'],
                close=df['Close'])])

fig.update_layout(title= "Rumo 2020")

Comparativo entre o preço e o volume das ações da Rumo

In [39]:
df = rumo[rumo.index.year == 2020]

mpf.plot(df,volume=True,tight_layout=True, style='yahoo')

Verificando a variação do menor valor para o maior valor nos preços das ações da Rumo

In [40]:
mpf.plot(df,fill_between=dict(y1=df['Low'].values,y2=df['High'].values))

As ações da Gerdau cairam bastante em Março/2020 (Possível causa Pandemia do Coronavirus) atualmente está seguindo uma tendência de valor constante!

Comparativo entre as 3 ações

In [41]:
df = rumo[rumo.index.year == 2020]
df["Close"].plot(figsize=(22,8), label="Rumo")
df = gerdau[gerdau.index.year == 2020]
df["Close"].plot(label="Gerdau")
df = marfrig[marfrig.index.year == 2020]
df["Close"].plot(label="Marfrig")

plt.legend()
Out[41]:
<matplotlib.legend.Legend at 0x7ffab0aeefd0>